Listin Gambas2
Création d'un programme en Gambas2 : un répertoire téléphonique pas à pas
Origine : http://listingambas.blogspot.com/2011/06/anexo-5-optimizando-nuestro-codigo.htmlAnnexe 5: Optimisation de notre code.
Une fois
le programme terminé, on voit que nous pouvons l'organiser
et réduire le
code répétitif en utilisant les appels de
procédure.
Nous avons, par exemple, ce code qui est répété plusieurs fois :
Nous avons, par exemple, ce code qui est répété plusieurs fois :
'Mettre à vide la
propriété
.Text des textbox
PictureBoxphoto.Picture = Picture["icon:/96/gambas"]
TextBoxDNI .text = ""
TextBoxnom .text = ""
TextBoxprenoms .text = ""
TextBoxEntreprise .text = ""
TextBoxPoste .text = ""
TextBoxTelEntreprise .text = ""
TextBoxTelPerso .text = ""
TextBoxFax .text = ""
TextBoxMobilEntreprise .text = ""
TextBoxMobilPerso .text = ""
TextBoxWEB .text = ""
PictureBoxphoto.Picture = ""
TextBoxAdresse .text = ""
TextBoxComments .text = ""
TextBoxDate .text = ""
TextBoxmail .text = ""
' écriture des données saisies dans la grille
titre.remplir()
' setfocus mis en tête des données
TextBoxDNI.SetFocus
PictureBoxphoto.Picture = Picture["icon:/96/gambas"]
TextBoxDNI .text = ""
TextBoxnom .text = ""
TextBoxprenoms .text = ""
TextBoxEntreprise .text = ""
TextBoxPoste .text = ""
TextBoxTelEntreprise .text = ""
TextBoxTelPerso .text = ""
TextBoxFax .text = ""
TextBoxMobilEntreprise .text = ""
TextBoxMobilPerso .text = ""
TextBoxWEB .text = ""
PictureBoxphoto.Picture = ""
TextBoxAdresse .text = ""
TextBoxComments .text = ""
TextBoxDate .text = ""
TextBoxmail .text = ""
' écriture des données saisies dans la grille
titre.remplir()
' setfocus mis en tête des données
TextBoxDNI.SetFocus
Pour
ce code qui est répété un grand nombre de fois, nous
pouvons créer une subroutine que nous appelerons quand nous en
aurons besoin.
'---------------------------------------------------------------
'Code
regroupant ce qui est répété
'---------------------------------------------------------------
PUBLIC
SUB
nettoie ()
'Mettre à vide la
propriété
.Text des textboxPictureBoxphoto.Picture = Picture["icon:/96/gambas"]
TextBoxDNI .text = ""
TextBoxnom .text = ""
TextBoxprenoms .text = ""
TextBoxEntreprise .text = ""
TextBoxPoste .text = ""
TextBoxTelEntreprise .text = ""
TextBoxTelPerso .text = ""
TextBoxFax .text = ""
TextBoxMobilEntreprise .text = ""
TextBoxMobilPerso .text = ""
TextBoxWEB .text = ""
PictureBoxphoto.Picture = ""
TextBoxAdresse .text = ""
TextBoxComments .text = ""
TextBoxDate .text = ""
TextBoxmail .text = ""
' écriture des données saisies dans la grille
titre.remplir()
' setfocus mis en tête des données
TextBoxDNI.SetFocus
Une
autre
amélioration consiste à mettre des icônes aux
menus :
Par l'éditeur de menus, nous pouvons mettre quelques icônes pour distinguer les options des menus, c'est facile et ça présente bien :
![]() |
|
![]() |
![]() |
Une
autre
amélioration consiterait
à mettre une étiquette qui afficherait
le
fichier ".lis" sur lequel nous travaillons actuellement.
Dans le
formulaire Fmain, créons un LabelText appelé labelActual
et dans l'IDE de Gambas, nous
mettons la
valeur raised à la
propriété "Border", pour qu'elle se voit mieux visible (c'est un
cadre en relief sur la zone d'étiquette) Chaque fois que vous ouvrez, enregistrez, ou générez la «Liste générale» le nom du fichier y sera affiché :
Par exemple : Module Fichier.Sauve.
...
.........
lignes
=
& var. Date_donnees
[a] &
codefinligne
lignes = &
var. email
[a] &
codefinligne
NEXT
var. changement
=
"NON"
File . Save
(destination, lignes)
Fmain.
LabelActual
. text
=
destination
fins: «Nous
avons
appuyé
sur le bouton Annuler dans la boîte de
dialogue Dialog.SaveFile ()
' Fin de la sous-routine
END
Dans le
module
fichier.
ouvrir :....
........
b + =
1
var. mail
[a] =
arr_chaine [b]
NEXT
var. change
=
"NON"
titre. remplir
()
FMain.
LabelActual
. text
=
Dialog. Chemin
ENDIF
finlecture:
END
Et le
module importer.complet
: ...
.............
lignes
=
& var. mail
[a] &
codefinligne
NEXT
File . save
(destination, lignes)
var. change
=
"NON"
FMain.
LabelActual
. text
=
destination
'Fin du processus
END
Nous voudrions à peu près ceci :
Annexe 6: derniers ajouts
Dans
cette
annexe, nous allons ajouter un
nouveau module qui sera appelé ajoutrecents
, et qui se chargera de se «souvenir» des dossiers
précédemment ouverts.
Ajoutons
d'abord
ce menu au formulaire Fmain
via l'éditeur de menu :

Et nous allons y mettre

Pour
le nom de
recent1 , recent 2,
recent3 ou recent4
mettre dans le titre "(vide)."
De
cette
façon, nous disposons de 5 emplacements pour stocker les
chemins des 5 derniers fichiers ouverts.
Dans
le
formulaire Fmain
, ajoutez dans Form_Open ():
PUBLIC
SUB
Form_Open ()
ME.CENTER
()
var. reinit
()
titre. definir
()
var chemin_photo
=
"icône: / 96/gambas"
AjoutRecents.
add
()
END
et pour que chaque fois que nous cliquons sur un menu de ces derniers on aille ouvrir le fichier :
'---------------------------------
' Ouverture d'un fichier
récent
'---------------------------------
PUBLIC
SUB
recent0_Click ()
fichier. ouvrir
(FMain. recent0
. caption
)
END
PUBLIC
SUB
recent1_Click ()
fichier. ouvrir
(FMain. recent1
. caption
)
END
PUBLIC
SUB
recent2_Click ()
fichier. ouvrir
(FMain. recent2
. caption
)
END
PUBLIC
SUB
recent3_Click ()
fichier. ouvrir
(FMain. recent3
. caption
)
END
PUBLIC
SUB
recent4_Click ()
fichier. ouvrir
(FMain. recent4
. caption
)
END
et
Form_Close
()
PUBLIC
SUB
Form_Close ()
DIM
res AS
Integer
IF
var. change
=
"oui"
THEN
res =
message. Question
( "Voulez-vous
quitter
sans
sauvegarder?"
, "non",
"oui"
)
IF
Res =
2 THEN
AjoutRecent.Sauve
()
ME
. CLOSE
ELSE
STOP
EVENT 'arrêt
de
la gestion d'évènement et sortie du programme
ENDIF
ELSE
ME
. CLOSE
ENDIF
'On ne quitte pas le
programme
FIN
Dans le module de fichier , à la routine open () nous ajoutons au début :
PUBLIC
SUB ouvrir ( OPTION chemin AS STRING )
DIM a AS Integer 'compteur de groupe de
données
DIM b AS Integer
'compteur
de
données
DIM arr_chaines AS STRING
[ ]
DIM codefinligne AS STRING
DIM numero_de_donnee AS Integer
codefinligne =
"|"
IF
chemin =
"" THEN
Dialog.
Titre
=
"Sélectionner un
fichier de données Listin"
Dialog.
Filtre
= [ "*. lis" , "Données Listin" ]
IF
NOT
Dialog. OpenFile () THEN
racine = Dialog.Path
ELSE
STOP
EVENT
ENDIF
ENDIF
arr_chaines =
Split
(File.Load(racine), codefinligne)
IF arr_chaines [ 0 ] <> "v0.0.1" THEN
'version incompatible avec la
version de ce programme, abandon de la procédure
... ...
et à la fin du
module nous ajoutons
... ...
var. mail
[a] =
arr_chaines [b]
NEXT
var. change
=
"NON"
titre. remplir
()
FMain. LabelActual
. text
=
racine
ajoutrecents.
add.racine
finlecture:
END
PUBLIC
SUB
ajouter (
chemin AS string )
AS string
IF
FMain. recent0
. caption
=
"(pas
de
récent)" THEN
FMain. recent0
. caption
=
chemin
RETURN
ENDIF
'Ne
continue
pas si l'élément est répété
IFFMain.
recent0
. caption
= chemin
THEN
RETURN
ENDIF
IFFMain. recent1.
caption
= cheminTHEN
RETURN
ENDIF
IFFMain.
recent2.
caption
= cheminTHEN
RETURN
ENDIF
IFFMain.
recent3.
caption
= cheminTHEN
RETURN
ENDIF
IFFMain.
recent4.
caption
= cheminTHEN
RETURN
ENDIF
IFFMain. recent1
. caption
=
"(vide)" THEN
FMain. recent1
. caption
=
chemin
FMain. recent1
. Visible
=
TRUE
RETURN
ENDIF
IF
FMain. recent2
. caption
=
"(vide)"
ALORS
FMain.recent2
. caption
=
chemin
FMain. recent2
. Visible
=
TRUE
RETURN
ENDIF
IF
FMain. recent3
. caption
=
"(vide)"
ALORS
FMain. recent3
. caption
=
chemin
FMain. recent3
. Visible
=
TRUE
RETURN
ENDIF
IF FMain. recent4
. caption
=
"(vide)"
ALORS
FMain. recent4
. caption
=
chemin
FMain. recent4
. Visible
=
TRUE
RETURN
ENDIF
'Si
on parvient jusqu'ici, ça signifie que nous avons remplies les 5
dernières
'Il
nous
faut
donc décaler toutes les dernières légendes et
ajouter la nouvelle
FMain. recent0
. caption
=
FMain. recent1
. caption
FMain. recent1
. caption
=
FMain. recent2
. caption
FMain. recent2
. caption
=
FMain. recent3
. caption
FMain.
recent3
. caption
=
FMain. recent4
. caption
FMain. recent4
. caption
=
chemin
END
PUBLIC
SUB
Sauve ()
DIM
lignes AS string
DIM
chemin AS string
lignes
=
"**************
***
Contenu
Doc recents "
&
"\ n"
lignes
&
=
"documentsrecents"
&
"\
n"
lignes
&
=
"v.0.0.1"
&
"\
n"
lignes
=
& FMain. recent0
. caption
&
"\
n"
lignes
=
& FMain. recent1
. caption
&
"\
n"
lignes
=
& FMain. recent3
. caption
&
"\
n"
lignes
=
& FMain. recent3
. caption
&
"\
n"
lignes
=
& FMain. recent4
. caption
&
"\
n"
lignes
=
&
Fin
"*************
************"
&
"\
n"
chemin
=
user.home
Fichier
. Enregistrer
(
chemin &
"/
documentsRecentslistin.DocRec"
,
lignes )
FIN
PUBLIC
SUB
ouverte ()
DIM
arr_chaines AS
cordes
[]
FMain.
recent1. Visible
=
FALSE
FMain. recent2
. Visible
=
FALSE
FMain.
recent3
. Visible
=
FALSE
FMain.
recent4
. Visible
=
FALSE
IF
Exist (user.home &
"/
documentsrecentslistin.DocRec"
) =
FALSE
THEN
'Il
n'ya
pas
de fichier, nous pouvons continuer à sauver sous le même nom
ENDIF
TRY
arr_chaines = Split( file
. LOAD
(
user.home &
"/
documentsrecentslistin.DocRec"
) ,
"\ n" )
IF ERROR THEN
Message.
Error
( "Erreur
de
lecture" )
RETURN
ENDIF
'Si
une
erreur
est retournée au programme,on ne peut pas trouver le
fichier documentsrecents.DocRec
FMain.
recent0. caption
=
arr_chaines [ 3
]
FMain. recent1. caption
=
arr_chaines [ 4
]
FMain.
recent2.
caption
=
arr_chaines [ 5
]
FMain.
recent3.
caption
=
arr_chaines [ 6
]
FMain.
recent4.
caption
=
arr_chaines [ 7
]
IF
FMain. reciente1
. caption
<>
"(vide)" THEN
FMain. recent1
. Visible
=
TRUE
ENDIF
IF
FMain. recent2.
caption
<>
"(vide)" THEN
FMain. recent2.
Visible
=
TRUE
ENDIF
IF
FMain. recent3.
caption
<>
"(vide)" THEN
FMain. recent3.
Visible
=
TRUE
ENDIF
IF
FMain. recent4.
caption
<>
"(vide)" THEN
FMain. recent4.
Visible
=
TRUE
ENDIF
END